#pragma once

#include "Astronomy/SolarTerms.hpp"
#include "Date.hpp"
#include "SexagenaryCycle.hpp"

// 本月信息;
struct InformationOfTheMonth
{
public:
    // 月索引;
    unsigned char MonthIndex;
    // 本月天数;
    unsigned char NumberOfDays;
    // 月首日星期索引;
    unsigned char FirstDayWeekIndex;
    // 本月星期总数;
    unsigned char NumberOfWeeks;
    // 本月周数索引;
    unsigned char IndexOfWeeks;
};
struct InformationOfLunarMonth
{
    // 中气;
    SolarTerm MiddleSolarTerm;
    // 中气出现日期时间;
    double  MiddleSolarTermJd;
    // 月相;
    int  MoonPhases;
    // 月相出现日期时间;
    double  MoonPhasesJd;
};
struct InformationOfTheDay
{
    // 阳历 月序号;
    unsigned char DayIndex;
    // j2000起的 今日的儒略日;
    double        jd;
    // 本日农历信息;
    Date Lunar;

    // 干支纪元;
    SexagenaryCycleDate scDate;
};
class LunarObject
{
    Date Gregorian;

    InformationOfTheMonth MonthInfo;
};
// 节气距离当前的天数 - 暂存;
struct InformationOfTheSolarTerm
{
    // ob.cur_dz 距冬至的天数
    int dayCountToDongzhi;
    // ob.cur_xz 距夏至的天数
    int dayCountToXiazhi;
    // ob.cur_lq 距立秋的天数
    int dayCountToLiqiu;
    // ob.cur_mz 距芒种的天数
    int dayCountToMangzhong;
    // ob.cur_xs 距小暑的天数
    int dayCountToXiaoshu;
};